using System;
using System.Collections.Generic;
using UnityEngine.Serialization;

namespace UnityEngine.UI
{
	public class ZImageEx: ZImage
	{
		public enum Rotation
		{
			None,
			X,
			Y,
			XY,
		}

		public Rotation rotation;

		// #if UNITY_5
		protected override void OnPopulateMesh(VertexHelper vh)
		{
			base.OnPopulateMesh(vh);

			List<UIVertex> vbo = new List<UIVertex>();
			for(int i = 0; i < vh.currentVertCount; i++)
			{
				UIVertex v = new UIVertex();
				vh.PopulateUIVertex(ref v, i);
				vbo.Add(v);
			}

			switch(rotation)
			{
			case Rotation.X:
				{
					changeVertexPos(vbo, true, false);
				}
				break;
			case Rotation.Y:
				{
					changeVertexPos(vbo, false, true);
				}
				break;
			case Rotation.XY:
				{
					changeVertexPos(vbo, true, true);
				}
				break;
			}

			for(int i = 0; i < vbo.Count; i++)
			{
				vh.SetUIVertex(vbo[i], i);
			}
		}
		// #else
		// protected override void OnFillVBO(List<UIVertex> vbo)
		// {
		// 	base.OnFillVBO(vbo);

		// 	switch(rotation)
		// 	{
		// 		case Rotation.X:
		// 		{
		// 			changeVertexPos(vbo, true, false);
		// 		}
		// 		break;
		// 		case Rotation.Y:
		// 		{
		// 			changeVertexPos(vbo, false, true);
		// 		}
		// 		break;
		// 		case Rotation.XY:
		// 		{
		// 			changeVertexPos(vbo, true, true);
		// 		}
		// 		break;
		// 	}
		// }
		// #endif

		private void changeVertexPos(List<UIVertex> vbo, bool isX, bool isY)
		{
			for(int i = 0; i < vbo.Count; i++)
			{
				UIVertex v = vbo[i];
				Vector3 t = vbo[i].position;
				if(isX)
				{
					t.x = -t.x;
				}

				if(isY)
				{
					t.y = -t.y;
				}

				v.position = t;
				vbo[i] = v;
			}
		}
    }
}